Del paquete igraph seleccionamos el set de datos macaque. Estos datos consisten de un modelo de grafos para las Ă¡reas visotĂ¡ctiles y conexiones del cerebro del mono macaco. El modelo consta de 45 Ă¡reas y 463 conexiones dirigidas.
# Cargamos librerĂas
library(tidyverse)
## ── Attaching packages ────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.1.0 ✔ purrr 0.2.5
## ✔ tibble 1.4.2 ✔ dplyr 0.7.8
## ✔ tidyr 0.8.2 ✔ stringr 1.3.1
## ✔ readr 1.3.0 ✔ forcats 0.3.0
## ── Conflicts ───────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
library(tidygraph)
##
## Attaching package: 'tidygraph'
## The following object is masked from 'package:stats':
##
## filter
library(ggraph)
library(igraphdata)
# Cargamos los datos
data("macaque")
# Extraemos componentes
componentes <- igraph::decompose(macaque)
componente_grande <- componentes[[1]]
# Estructura de red y medidas de importancia
mono_macaque <- componente_grande %>% #nodos
as_tbl_graph() %>% # convierte a tbl_graph
activate(edges) %>% # activa aristas
mutate(weights = 1) %>% # pone el mismo peso para todos los nodos
activate(nodes) %>% # activa los nodos
mutate(imp_Betweeness = centrality_betweenness(), # medidas de centralidad
imp_Closeness = centrality_closeness(),
imp_Eigenvec = centrality_eigen())
# Imprime red
mono_macaque
## # A tbl_graph: 45 nodes and 463 edges
## #
## # A directed simple graph with 1 component
## #
## # Node Data: 45 x 5 (active)
## shape name imp_Betweeness imp_Closeness imp_Eigenvec
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 square V1 2.01 0.00980 0.452
## 2 square V2 26.7 0.0127 0.782
## 3 square V3 36.9 0.0128 0.831
## 4 square V3A 8.64 0.0116 0.765
## 5 square V4 163. 0.0133 0.867
## 6 square V4t 2.84 0.0106 0.526
## # ... with 39 more rows
## #
## # Edge Data: 463 x 3
## from to weights
## <int> <int> <dbl>
## 1 1 2 1
## 2 1 3 1
## 3 1 4 1
## # ... with 460 more rows
Considera betweeness, closeness, centralidad de eigenvector.
# Ordena por importancia betweeness
nodos_imp<- mono_macaque %>% # datos
activate(nodes) %>% # acitva nodos
as_tibble() %>% # convierte a tibble
select(shape,name,imp_Betweeness)%>% # selecciona variables
arrange(desc(imp_Betweeness)) # ordena por betweeness
nodos_imp
## # A tibble: 45 x 3
## shape name imp_Betweeness
## <chr> <chr> <dbl>
## 1 square VIP 347.
## 2 square 46 249.
## 3 square V4 163.
## 4 circle 7b 153.
## 5 circle SII 152.
## 6 square LIP 132.
## 7 square FEF 112.
## 8 square TF 98.3
## 9 circle Ig 83.3
## 10 square 7a 81.2
## # ... with 35 more rows
# Barplot de la importancia betweeness
qplot(pull(nodos_imp, imp_Betweeness),bins=50)
# Ordena por importancia closeness
nodos_imp<-mono_macaque %>% # datos
activate(nodes) %>% # acitva nodos
as_tibble() %>% # convierte a tibble
select(shape,name,imp_Closeness)%>% # selecciona variables
arrange(desc(imp_Closeness)) # ordena por closeness
nodos_imp
## # A tibble: 45 x 3
## shape name imp_Closeness
## <chr> <chr> <dbl>
## 1 square 46 0.0147
## 2 square LIP 0.0143
## 3 square VIP 0.0141
## 4 square FEF 0.0141
## 5 square TF 0.0137
## 6 square V4 0.0133
## 7 square MSTd/p 0.0133
## 8 square FST 0.0133
## 9 square MT 0.0132
## 10 square V3 0.0128
## # ... with 35 more rows
# Barplot de la importancia closeness
qplot(pull(nodos_imp, imp_Closeness),bins=50)
# Ordena por importancia eigenvector
nodos_imp<-mono_macaque %>% # datos
activate(nodes) %>% # acitva nodos
as_tibble() %>% # convierte a tibble
select(shape,name,imp_Eigenvec)%>% # selecciona variables
arrange(desc(imp_Eigenvec)) # ordena por eigenvector
nodos_imp
## # A tibble: 45 x 3
## shape name imp_Eigenvec
## <chr> <chr> <dbl>
## 1 square LIP 1
## 2 square FEF 0.976
## 3 square FST 0.944
## 4 square MT 0.936
## 5 square MSTd/p 0.935
## 6 square VIP 0.881
## 7 square V4 0.867
## 8 square V3 0.831
## 9 square VP 0.797
## 10 square PO 0.793
## # ... with 35 more rows
# Barplot de la importancia eigenvector
qplot(pull(nodos_imp, imp_Eigenvec),bins=50)
Grafica (ggraph o visNetwork) usando un algoritmo de fuerza y mostrando con tamaño y/o color las importancias. Si tu grĂ¡fica es muy grande puedes exportar a gml para utilizar Gephi (ver notas).
ggraph(mono_macaque, layout = 'nicely') +
geom_edge_link(alpha=0.2) +
geom_node_point(aes(size = imp_Betweeness, colour = imp_Betweeness)) +
geom_node_text(aes(label = name), nudge_y = 0.1, size=5) +
theme_graph(base_family = 'sans')+
ggtitle("Importancia por Betweeness")+
theme(plot.title = element_text(hjust=0.5))
ggraph(mono_macaque, layout = 'nicely') +
geom_edge_link(alpha=0.2) +
geom_node_point(aes(size = imp_Closeness, colour = imp_Closeness)) +
geom_node_text(aes(label = name), nudge_y = 0.1, size=5) +
theme_graph(base_family = 'sans')+
ggtitle("Importancia por Closeness")+
theme(plot.title = element_text(hjust=0.5))
ggraph(mono_macaque, layout = 'nicely') +
geom_edge_link(alpha=0.2) +
geom_node_point(aes(size = imp_Eigenvec, colour = imp_Eigenvec)) +
geom_node_text(aes(label = name), nudge_y = 0.1, size=5) +
theme_graph(base_family = 'sans')+
ggtitle("Importancia por Eigenvectores")+
theme(plot.title = element_text(hjust=0.5))
ggraph(mono_macaque, layout = 'nicely') +
geom_edge_link(alpha=0.2) +
geom_node_point(aes(size = imp_Betweeness, colour = imp_Eigenvec)) +
geom_node_text(aes(label = name), nudge_y = 0.2, size=3) +
theme_graph(base_family = 'sans')+
ggtitle("Importancia por Betweeness y Eigenvectores")+
theme(plot.title = element_text(hjust=0.5))
ggraph(mono_macaque, layout = 'nicely') +
geom_edge_link(alpha=0.2) +
geom_node_point(aes(size = imp_Betweeness, colour = imp_Closeness)) +
geom_node_text(aes(label = name), nudge_y = 0.2, size=3) +
theme_graph(base_family = 'sans')+
ggtitle("Importancia por Betweeness y Closeness")+
theme(plot.title = element_text(hjust=0.5))
ggraph(mono_macaque, layout = 'nicely') +
geom_edge_link(alpha=0.2) +
geom_node_point(aes(size = imp_Eigenvec, colour = imp_Closeness)) +
geom_node_text(aes(label = name), nudge_y = 0.2, size=3) +
theme_graph(base_family = 'sans')+
ggtitle("Importancia por Eigenvector y Closeness")+
theme(plot.title = element_text(hjust=0.5))
library(visNetwork)
edges<-mono_macaque%>%activate(edges)%>%as_data_frame
nodes<-mono_macaque%>%activate(nodes)%>%as_data_frame
nodos<-sort(union(unique(nodes$from),unique(nodes$to)))
set.seed(3464)
red_vis<-visNetwork(nodes=data_frame(id=1:length(nodos),label=nodos),edges,width="100%")%>%
visEdges(arrows = 'to', smooth =T) %>%
visPhysics(solver="forceAtlas2Based",
forceAtlas2Based = list(gravitationalConstant=-50,
centralGravity=0.01,
springLength=100,
springConstant=0.08,
avoidOverlap=1))
red_vis